package cn.zhuzicc;

import cn.zhuzicc.entity.Employee;
import cn.zhuzicc.service.MyFunction2;
import org.junit.Test;

import java.util.*;

/**
 * @author zhaoxiang
 * @version 1.0
 * @description
 * @Date 2020/11/29 15:17
 */
public class LambdaExercises {

    private List<Employee> employeeList = new ArrayList<>(Arrays.asList(
            new Employee("张三", 27, 3400.88),
            new Employee("李四", 25, 6000.55),
            new Employee("王五", 41, 4200.33),
            new Employee("赵六", 35, 5600.67),
            new Employee("田七", 41, 4112.33)));

    /**
     * 1.调用Collections.sort() 方法，通过定制排序比较两个Employee
     * (先按年龄比，年龄相同按姓名比)，使用Lambda 作为参数传递。
     */
    @Test
    public void test1(){
        Collections.sort(employeeList, (e1, e2) -> {
            if (e1.getAge() == e2.getAge()){
//                return e1.getName().compareTo(e2.getName());
                return Double.compare(e1.getSalary(),e2.getSalary());
            }else {
                return Integer.compare(e1.getAge(),e2.getAge());
            }
        });
        employeeList.forEach(item -> {
            System.out.println(item);
        });
    }

    /**
     *  2.①声明函数式接口，接口中声明抽象方法，public String getValue(String str);
     *    ②声明类TestLambda，类中编写方法使用接口作为参数，将一个字符串转换成大写，
     *     并作为方法的返回值。。
     *    ③再将一个字符串的第0个和第5个索引位置进行截取子串。
     */
    @Test
    public void test2(){
        // 将字符串转换成大写
        String str = strHandler("HelloWorld!!", x -> x.toUpperCase());
        System.out.println(str);
        // 将字符串转换成大写
        str = strHandler("HelloWorld!!", x -> x.substring(0,5));
        System.out.println(str);
    }

    public String strHandler(String str, MyFunction2 fun){
        return fun.getValue(str);
    }
}
